home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / GRAPHICS / VOXRAY.ZIP / PALOBJ.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-10  |  1.3 KB  |  66 lines

  1. #include "palobj.h"
  2. #include <stddef.h>
  3.  
  4. LONG palobj::loadpalette(UCHAR imagenum)
  5. {
  6. if (!inpcxfile.is_open()) {
  7.    return -1;
  8. }
  9. if ((palette[imagenum]=new UCHAR [768])==NULL)
  10.   return -1;
  11. LONG seek=inpcxfile.tellg();
  12. inpcxfile.seekg(-768L,ios::end);
  13. inpcxfile.read(palette[imagenum],768);
  14. for (LONG i=0;i<256;i++)
  15.   for (LONG j=0;j<3;j++)
  16.     palette[imagenum][i*3+j]=palette[imagenum][i*3+j]>>2;
  17. inpcxfile.seekg(seek,ios::beg);
  18. return 0;
  19. }
  20.  
  21. LONG palobj::writepalette(UCHAR imagenum)
  22. {
  23. PUCHAR ch=new UCHAR [1];
  24. ch[0]=12;
  25. outpcxfile.write(ch,1);
  26. PUCHAR temppalette=new UCHAR [768];
  27. for (LONG i=0; i<256; i++) {
  28.    for (LONG j=0; j<3; j++) {
  29.       temppalette[i*3+j]=palette[imagenum][i*3+j]<<2;
  30.    } /* endfor */
  31. } /* endfor */
  32. outpcxfile.write(temppalette,768);
  33. delete temppalette;
  34. delete ch;
  35. return 0;
  36. }
  37.  
  38. LONG palobj::drawpalette(palette_load_func hw_pal_load_func, UCHAR imagenum)
  39. {
  40. PUCHAR palptr=palette[imagenum];
  41. (*hw_pal_load_func)(palptr);
  42. return 0;
  43. }
  44.  
  45. LONG palobj::Write(UCHAR imagenum)
  46. {
  47. LONG seek=outpcxfile.tellp();
  48. if (gobject::Write(imagenum)) {
  49.    return -1;
  50. }
  51. if (writepalette(imagenum)) {
  52.    return -1;}
  53. outpcxfile.seekp(seek, ios::beg);
  54. return 0;
  55. }
  56.  
  57. LONG palobj::load(UCHAR imagenum)
  58. {
  59. if (gobject::load(imagenum))
  60.   return -1;
  61. if (loadpalette(imagenum))
  62.   return -1;
  63. return 0;
  64. }
  65.  
  66.